home *** CD-ROM | disk | FTP | other *** search
Wrap
/* * MultiView NG * PROC historia programu * * 15.02.1999 * Zaczynam pracë. * * geticon wrzucona z powrotem DO gîównego pliku * inne procedury zmienione sâ * show_error(body,title) -> request(title,body) * nowa procka check_and_run() -> sprawdza, depakuje, uruchamia * * 02.03.1999 * * Przerobiê : * * - pobraê nazwy plików * - sprawdzic via FileID, datatype * - Odszukaê tooltype * - Jeôli nie ma a jest PACKED ale nieARCHIVE TO unpack() * - sprawdziê znowu * - odszukaê tooltype * * 25.03.1999 * * Zmiany : * - geticon() nowa * - zmiany w unpack() - krótsza * - zmiany w read/writefile() - obsîuga bîëdów przekazana wyûej (unpack()) * * Wersja 4.82 (14.04.1999) * * Mozliwoôê zewnëtrzego pokazania AmigaGuide * - w runcmd() nie ma obsîugi AmigaGuide jako takiego * - w get_def() jak nie ma ttypa a jest aguide TO RETURN datatype * * - wyrzucona procedura noguide() * - w obsluz() zmieniona tresc warunku - nie ma juz zbednego filerequestera przy startach z WB * * Wersja 4.90 (009.05.1999) * * Wstawione ograniczenia wersji niezarejestrowanej * Zmienione EasyRequestArgs na request() * Wersja unreg ma wstawiony UAE_Detect * Jesli DT-> Decompressor TO packed := TRUE * ENDPROC * */ OPT OSVERSION = 37, PREPROCESS MODULE 'dos/dos', 'dos/datetime', 'dos/dostags', 'exec/memory', 'workbench/startup', 'workbench/workbench', 'fileid', 'libraries/fileid', 'Fabio/ttparse_oo', 'libraries/fileid_iddefs', 'asl', 'libraries/asl', 'datatypes', 'datatypes/datatypesclass', 'datatypes/datatypes','icon', 'wb', '*mv_consts', '*mv_version', '*mv_guide', '*mv_locale', '*mv_asl' #ifdef VER_FULL MODULE '*mv_xfd', '*mv_ext' #endif DEF filename[256] : STRING, progname[256] : STRING, -> nazwa pliku z programem error [300] : STRING, -> text bîëdu screen [60] : STRING, -> nazwa screena dla guide() textlist[21] : LIST -> lista ze stringami DEF ttype : PTR TO ttparse, -> ikona fib : PTR TO fi_fileinfo, -> FileID structure req : PTR TO filerequester, -> Potrzebny jesli multiselect dth : PTR TO datatypeheader -> Datatypes name DEF aguide = FALSE, -> AmigaGuide ? kick = FALSE, -> czy Kickstart >=39 cli = FALSE, -> CLI mode info = TRUE, -> Show INFO ? pier = TRUE, -> Pierwszy plik ? - jak FALSE -> quit packed = FALSE PROC main() HANDLE DEF argmsg : PTR TO wbstartup, wb_arg : PTR TO wbarg, myargs : PTR TO LONG, files : PTR TO LONG, file = NIL, rdargs = NIL textlist := locale() getIcon() StrCopy(filename,progname) version(progname) IF KickVersion(39) THEN kick := TRUE IF (fileidbase := OpenLibrary('FileID.library',2)) <> NIL IF (fib := FiAllocFileInfo()) = NIL THEN Raise(ERR_ALLOC) ENDIF datatypesbase := OpenLibrary('datatypes.library',39) IF wbmessage -> WriteF('Started from WB\n') screen := NIL argmsg := wbmessage wb_arg := argmsg.arglist -> WriteF('Mam \d parametrów\n',argmsg.numargs) IF argmsg.numargs > 1 obsluz(wb_arg,argmsg.numargs,TRUE) ELSE pier := no_params() ENDIF -> CLI mode ELSE -> WriteF('Started From CLI\n') myargs := [NIL,NIL,NIL,NIL,NIL,NIL,NIL,NIL,NIL,NIL,NIL,NIL,NIL] IF rdargs := ReadArgs('FILE/M,PUB=PUBSCREEN/K,REQ=REQUESTER/S,APPICON/S,CLIPBOARD/S,CLIPUNIT/K/N,SCREEN/S,BOOKMARK/S,FONTNAME/K,FONTSIZE/K/N,BACKDROP/S,WINDOW/S',myargs,NIL) cli := TRUE IF myargs[2] -> REQ cli := FALSE info := TRUE ENDIF IF myargs[1] -> PUB StrCopy(screen,myargs[1]) ELSE screen := NIL ENDIF IF myargs[3] -> APPICON cli := FALSE appicon() Raise(ERR_EXIT) ENDIF files := myargs[NIL] -> FILE IF files WHILE files[] StrCopy(filename,files[file]) check_and_run() files[]++ ENDWHILE ELSE pier := no_params(TRUE) ENDIF ELSE pier := no_params(TRUE) ENDIF ENDIF EXCEPT DO -> WriteF('Zaczynam wychodziê\n') IF fib THEN FiFreeFileInfo(fib) IF fileidbase THEN CloseLibrary(fileidbase) IF rdargs THEN FreeArgs(rdargs) IF req THEN FreeAslRequest(req) IF aslbase THEN CloseLibrary(aslbase) IF datatypesbase THEN CloseLibrary(datatypesbase) END ttype -> WriteF('Zwolniîem wszystko\n') IF exception SELECT exception CASE ERR_CHECK IF pier StrCopy(error,textlist[ERR_CHECK]) StrAdd(error,filename) StrAdd(error,' !') ELSE -> WriteF('Wychodzë bo nie pier\n') CleanUp(NIL) ENDIF CASE ERR_EXIT -> WriteF('Wychodzë bo ERR_EXIT\n') CleanUp(NIL) DEFAULT IF exception < 20 StrCopy(error,textlist[exception]) ELSE StrCopy(error,textlist[ERR_UNKNOWN]) ENDIF ENDSELECT request(textlist[MSG_INFO_TITLE],error) ENDIF -> WriteF('Wychodzë normalnie\n') CleanUp(NIL) ENDPROC PROC fileidcheck() DEF id IF (FiIdentifyFromName(fib,filename)) = NIL ELSE Raise(ERR_CHECK) ENDIF aguide := FALSE id := fib.fi_id IF (fib.fi_globalfileclass = FIGFCF_PACKED) OR ((id > 3) AND (id < 17)) OR (id = 39) OR (id = $1e2) OR (id = $1eb) OR (id = $1e0) OR (id = $1e7) OR (id = $21d) OR (id = $214) OR (id = $248) OR (id = $249) OR (id = $1a0) OR (id = $1b7) THEN packed := TRUE ENDPROC fib.fi_description PROC runcmd() DEF cmd[200] : STRING, -> Komenda tmp[200] : STRING, run[512] : STRING, -> Execute() string succ = TRUE cmd := NIL IF fileidbase THEN cmd := fileidrun() IF cmd = NIL IF datatypesbase THEN cmd := datatypesrun() IF cmd = NIL #ifdef VER_FULL StrCopy(tmp,get_suffix(filename)) -> sprawdzamy rozszerzenie cmd := ttype.get(tmp) IF cmd ELSE StrCopy(tmp,get_prefix(filename)) -> wiëc moûe przedrostek cmd := get_def(tmp) ENDIF #endif IF cmd = NIL THEN cmd := get_def('DEFAULT3') ENDIF ENDIF #ifdef VER_FULL IF (succ := InStr(cmd,'%f')) > -1 StrCopy(tmp,'Run ') StrAdd(tmp,cmd,succ) StrAdd(tmp,filename) MidStr(run,cmd,succ + 2,ALL) StrAdd(tmp,run) StrCopy(run,tmp,ALL) ELSEIF (succ := InStr(cmd,'%p')) > -1 StrCopy(tmp,'Run ') StrAdd(tmp,cmd,succ) StrCopy(filename,get_fullname('',filename)) StrAdd(tmp,filename) MidStr(run,cmd,succ + 2,ALL) StrAdd(tmp,run) StrCopy(run,tmp,ALL) ELSE #endif StringF(run,'Run \s "\s" \0\n',cmd,filename) #ifdef VER_FULL ENDIF #endif StrCopy(tmp,cmd) UpperStr(tmp) IF StrCmp(tmp,'DATATYPE',ALL) succ := guide(filename,39,screen) IF succ ELSE request('MultiView Info',textlist[ERR_NO_AGUIDE]) cmd := get_def('DEFAULT3') UpperStr(cmd) IF StrCmp(cmd,'DATATYPE',ALL) StrCopy(cmd,'C:More') StrCopy(error,textlist[ERR_MORE]) request(textlist[MSG_INFO_TITLE],error) ENDIF StringF(run,'Run \s "\s" \0\n',cmd,filename) Execute(run,NIL,NIL) ENDIF ELSE Execute(run,NIL,NIL) ENDIF ENDPROC PROC get_def(ttyp) DEF cmd[200] : STRING -> Komenda cmd := ttype.get(ttyp) IF cmd ELSE IF aguide THEN RETURN 'DATATYPE' IF kick cmd := ttype.get('DEFAULT3') IF cmd THEN RETURN cmd ENDIF cmd := ttype.get('DEFAULT') IF cmd ELSE RETURN 'DATATYPE' ENDIF ENDIF ENDPROC cmd PROC obsluz(wb_arg : PTR TO wbarg,num,wb = FALSE) DEF ktr = NIL IF wb wb_arg++ ktr := 1 ENDIF FOR ktr := ktr TO num filename[NIL] := NIL aguide := FALSE IF wb_arg.lock > NIL CurrentDir(wb_arg.lock) filename := wb_arg.name IF StrLen(filename) > NIL check_and_run() ENDIF ENDIF wb_arg++ ENDFOR ENDPROC PROC appicon() HANDLE DEF dobj : PTR TO diskobject, appmsg : PTR TO appmessage, myport = NIL, appicon = NIL, quit = FALSE, ok, a dobj := NIL IF (iconbase := OpenLibrary('icon.library', 37)) = NIL THEN Raise(ERR_NO_APPICON) IF (workbenchbase := OpenLibrary('workbench.library', 37)) = NIL THEN Raise(ERR_NO_APPICON) dobj := GetDiskObject(progname) IF dobj dobj.type := NIL IF (myport := CreateMsgPort()) <> NIL IF (appicon := AddAppIconA(NIL, NIL, 'MultiView', myport, NIL, dobj, NIL)) <> NIL REPEAT appmsg := NIL WaitPort(myport) quit := FALSE WHILE appmsg := GetMsg(myport) IF appmsg.numargs = NIL -> ikonka clicknieta ok := EasyRequestArgs(NIL,[20,NIL,textlist[MSG_INFO_TITLE],textlist[MSG_APP_INFO],textlist[MSG_APP_GADGETS]],NIL,NIL) SELECT ok CASE 1 quit := TRUE CASE 2 a := file_req(textlist[MSG_ASL_FR],screen) IF a obsluz(req.arglist,req.numargs) ENDIF ENDSELECT ELSEIF appmsg.numargs > NIL -> Coô dropniëto obsluz(appmsg.arglist, appmsg.numargs - 1) ENDIF ReplyMsg(appmsg) ENDWHILE UNTIL quit ENDIF ENDIF ENDIF EXCEPT DO IF appicon THEN RemoveAppIcon(appicon) IF dobj THEN FreeDiskObject(dobj) IF workbenchbase THEN CloseLibrary(workbenchbase) IF iconbase THEN CloseLibrary(iconbase) ReThrow() ENDPROC PROC datatypescheck() DEF dtn : PTR TO datatype, lock IF (lock := Lock(filename, ACCESS_READ)) IF (dtn := ObtainDataTypeA(DTST_FILE,lock,NIL)) -> Pobieram typ pliku dth := dtn.header IF StrCmp(dth.name,'AmigaGuide') THEN aguide := TRUE IF StrCmp(dth.name,'Decompressor') THEN packed := TRUE ReleaseDataType(dtn) ENDIF UnLock(lock) ENDIF ENDPROC dth.name PROC fileidrun() DEF cmd[200] : STRING, -> Komenda run[512] : STRING, -> Execute() string id, -> typ pliku typ id := fib.fi_id typ := fib.fi_globalfileclass StringF(run,'\z\r\d[3]',id) cmd := ttype.get(run) -> odczytuje xxx ttype IF cmd ELSE -> nie udaîo sië SELECT typ CASE FIGFCF_MUSIC_SCORE -> muzyka cmd := get_def('DEF_MUSIC') CASE FIGFCF_GRAPHIC_IMAGE -> grafika cmd := get_def('DEF_GFX') CASE FIGFCF_IFF_HEADER -> IFF cmd := get_def('DEF_IFF') CASE FIGFCF_FORMATTED_TEXT -> Text cmd := get_def('DEF_TEXT') CASE FIGFCF_EXECUTABLE -> Exe cmd := get_def('DEF_EXE') CASE FIGFCF_PACKED -> Spakowany cmd := get_def('DEF_PACK') CASE FIGFCF_ENCRYPTED -> Kodowany cmd := get_def('DEF_ENCRYPT') CASE FIGFCF_SCRIPT -> Skrypt cmd := get_def('DEF_SCRIPT') DEFAULT cmd := NIL ENDSELECT ENDIF -> Jeôli nie mamy FileId tooltype ENDPROC cmd PROC datatypesrun() DEF cmd[200] : STRING -> Komenda cmd := ttype.get(dth.name) -> odczytuje xxx ttype IF cmd ELSE -> nie udaîo sië cmd := NIL ENDIF ENDPROC cmd PROC check() DEF text[1024] : STRING, temp1[256] : STRING, temp2[256] : STRING IF fileidbase THEN StringF(temp1,'\n\s \s',textlist[MSG_INFO_TYPE],fileidcheck()) IF datatypesbase THEN StringF(temp2,'\n\s \s',textlist[MSG_INFO_TYPE],datatypescheck()) IF info StringF(text,'\s \s',textlist[MSG_INFO_FILE],filename) IF fileidbase THEN StrAdd(text,temp1) IF datatypesbase THEN StrAdd(text,temp2) IF cli WriteF('\n\s\n',text) ELSE request('MultiView Info',text) ENDIF ENDIF ENDPROC PROC check_and_run() DEF status = TRUE -> WriteF('Sprawdzam plik \s\n',filename) check() #ifdef VER_FULL IF packed status := unpack(filename,textlist) IF status THEN packed := FALSE check() ENDIF #endif runcmd() ENDPROC PROC getIcon() DEF wbstart : PTR TO wbstartup, wbarg : PTR TO wbarg, tempname[255] : STRING, iconname[255] : STRING, success, b NEW ttype.ttparse(FALSE) IF wbmessage wbstart := wbmessage wbarg := wbstart.arglist success := NameFromLock(GetProgramDir(),iconname,255) AddPart(iconname,wbarg.name,256) ELSE success := NameFromLock(GetProgramDir(),iconname,255) GetProgramName(tempname,255) AddPart(iconname,tempname,256) ENDIF ttype.file(iconname) IF ttype.error() THEN Raise(ERR_NO_ICON) #ifdef VER_FULL b := ttype.get('SHOWINFO') IF b UpperStr(b) IF StrCmp(b,'NO') THEN info := FALSE ENDIF #endif StrCopy(progname,iconname) ENDPROC PROC no_params(warunek = FALSE) DEF a IF warunek cli := FALSE filename[NIL] := NIL ENDIF a := file_req(textlist[MSG_ASL_FR],screen) IF a obsluz(req.arglist,req.numargs) ELSE RETURN FALSE ENDIF ENDPROC TRUE